在编程的过程中遇到报错信息是一件再普通不过的事情了, 当然这也是编程过程中很让人头疼的一件事了. 其实,只要耐心, 你会发现你遇到的所有错误,几乎在Stack Overflow
和github issues
中都能找到解决方案, 关键是如何去找的问题.
首先: 调整好心态
正确认识报错: 报错不是你学习路上的拦路虎, 恰恰相反, 报错是编译器派过来帮助你解决问题的向导. 你如果无视这位向导说的话, 那你势必要走无数弯路. 反之, 你可以轻松解决问题.
了解报错的几个诱因
- 语法错误
- 逻辑错误
- 开发环境问题
解决方法: 对症下药
- 如果是语法错误, 编译器报错类型肯定是正确的, 但是报错位置可能不靠谱. (因为语法牵 扯到相互匹配的问题). 此类问题是编程小白, 一开始最先要克服的问题, 通过一段时间的积累, 此类问题看到了立马就能条件反射式的解决
- 如果是逻辑错误, 最好的方式就是输出中间变量. 一步一步地排错, 错误点在哪儿.
- 如果是搭建网站的话, 刷新页面后, 后台会有中间变量的输出
- 如果是js的话, 使用alert(), 或者console.log() 可以输入中间变量
- 其他类问题, 比如开发环境配置. 此类问题解决办法相似. 为此博客的重点内容
解决开发类基本报错
指哪打哪型
此类问题, 一般很好解决. 报错中提示需要执行某命令, 跟着指示执行即可
举例说明:1
2An error occurred while installing nokogiri (1.8.4), and Bundler cannot continue.
Make sure that `gem install nokogiri -v '1.8.4' --source 'https://rubygems.org/'` succeeds before bundling.
提示make sure XX, 执行提示的命令即可gem install nokogiri
如果是Python可能有的提示是ModuleNotFoundError: No module named XX
报错module找不到, 可能是没有安装某个库.
探索型
- 找关键点: 从出现的报错辅助信息中, 找到最终要的关键点.
warning
的信息暂时可以不用理会; 遇到error
打头的信息需要注意; 如果终端是彩色的话, 红色报错信息, 一定要注意. - 优先解决第一个报错点: 如果出现多个报错信息怎么办? 优先解决第一个报错点, 因为后续的报错, 可能是由于第一个报错点引起的
- Google关键点: 一般搜索的使用, 直接Google报错信息就行;当然也可以Google执行什么命令时或者做什么操作时报出了什么错误)
- 一般着重看Stack Overflow和github的页面.
- 进入网页, 不要着急找解决方案. 先看一页标题, 看一下提问者的情况, 是否和自己的情况类似
- Stack Overflow一般排名第一的回答可以解决问题, 优先找已采纳的字样(即一个绿色对勾); 或者找赞多的
- github issues中也提供了很多解决方案: 直接看
emoji
哪个回答, 认同的人多, 就最有可能解决你的问题. - 注意事项: 搜索的时候, 要记得把个性化的信息去掉, 否则搜不到想要的东西. eg. 不要包含自己文件路径; 版本号处于一个模糊地带, 有时候版本是导致问题出现的原因, 但是很多时候, 加上版本号搜索, 缩小了搜索范围, 导致可能错过解决方案. 本人的做法是: 先不加版本号, 进行搜索,找解决方案; 如果找不到, 再加上版本号, 试一下.
卡住了怎么办
一般情况, 按照上面的思路, 可以解决问题. 但是如果没有找到合适的解决方案, 怎么办?
总体来说有两个策略.
设置deadline
对于小白来说, 半个小时的排错过程, 差不多是心里承受的极限了. 记得当时学C语言的时候, 在while()后加了一个;
,形成了死循环, 当时和一个室友,盯着程序看了一晚上才解决, 对于这种情况, 要学会止损. 如果浪费一个晚上, 去死盯着不能解决的bug, 能不能解决bug先不谈, 那种崩溃的心理过程, 会严重打击人的积极性和兴趣. 这不是一个好策略.
好的套路:
- 先独立解决, 设置半小时(或一小时,根据自己的情况定)的排错时间值, 如果超过了这个时间还没有解决, 先暂时放下.不要一个人再排错了
- 此时可以选择找其他同学(同事),帮助自己分析( 转换视角)
- 也可以记录笔记, 然后放松一下. 过一段时间(eg. 第二天), 然后再开始解决(明天的你和今天的你视角也是不同的) ,然后再开始尝试解决问题.
记笔记,整理思路
- 把未解决的错误, 记录下来. 把解决问题的思路和过程, 记录下来. 使用文字的方式理清自己的思路. 很多时候, 你会发现, 在记录的过程中, 突然会涌现很多解决问题的想法.
- 如果问题解决了, 尽量把报错信息和解决方案, 以及解决思路, 记录下来. 也可以发表到博客, 帮助自己的同时, 也帮助了别人.
- 注意: 记录这一步很重要, 很多人在不断地走老路,甚至于同一个错误很犯好几次, 然后每次都要重新纠结, 重新搜索答案. 如果记录下来的话, 由于印象深刻, 几乎不会犯同样类型的错误了, 即使犯了, 看看自己的笔记, 立马就能找到答案.